package com.jack.leetcode.每日一题;

/*** 
 * @author zhangjie
 * @date 2020/4/21 20:33
 */
public class 统计优美子数组 {

    public static void main(String[] args) {
        int[] nums = {1, 1, 2, 1, 1};
        int k = 3;
        System.out.println(numberOfSubarrays(nums, k));
        int[] nums1 = {2, 4, 6};
        k = 1;
        System.out.println(numberOfSubarrays(nums1, k));
        k = 2;
        int[] nums2 = {2, 2, 2, 1, 2, 2, 1, 2, 2, 2};
        System.out.println(numberOfSubarrays(nums2, k));
    }

    public static int numberOfSubarrays(int[] nums, int k) {
        if (nums.length == 0 || k <= 0) {
            return 0;
        }
        int n = nums.length;
        int left = 0;
        int right = 0;
        int odds = 0;
        int result = 0;
        while (right < n) {
            if ((nums[right++] & 1) == 1) {
                odds++;
            }
            if (odds == k) {
                int tmp = right;
                while (right < n && (nums[right] & 1) == 0) {
                    right++;
                }
                int rightEvent = right - tmp;
                int leftEvent = 0;
                while((nums[left]&1)==0){
                    leftEvent++;
                    left++;
                }
                result += (rightEvent+1)*(leftEvent+1);
                left++;
                odds--;
            }
        }
        return result;
    }

    //超时方法
//    public static int numberOfSubarrays(int[] nums, int k) {
//        if (nums.length == 0 || k <= 0) {
//            return 0;
//        }
//        int n = nums.length;
//        int result = 0;
//        for(int i = 0;i < n-k+1;i++){
//            for(int j = k;j <= n-i;j++){
//                if(judge(nums,i,j,k)){
//                    result++;
//                }
//            }
//        }
//        return result;
//    }
//
//    private static boolean judge(int[] nums,int m,int n,int k){
//        int odds = 0;
//        for(int i = m;i<n+m;i++){
//            if(nums[i]%2==1){
//                odds++;
//            }
//        }
//        if(odds == k){
//            return true;
//        }
//        return false;
//    }
}
